<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
	Function.prototype.method=function(name,func){  //
		this.prototype[name] = func;
		return this;
	};
	
	var is_array=function(value){   //자바스크립트는 배열,객체를 모두 object로 판별한다. 
		return value&&
				typeof value==='object' &&
				typeof value.length==='number' &&
				typeof value.splice==='function' &&
				!(value.propertyIsEnumerable('length'));
	};
	
	Array.method("reduce",function(f,value){   //Array객체에 프로토타입 reduce메소드 추가
		var i;
		for(i=0;i<this.length;i++){
			value = f(this[i],value);
		}
		return value;
	});
	
	/* Array.method("dim",function(dimention,initial){    //Array객체에 설정값으로 초기화 시키는 메소드 추가 ,1차배열만 초기화 
		var a = [],i;
		for(i=0;i<dimention;i++){
			a[i]=initial;
		}
		return a;
	}); */
	
	Array.dim=function(dimention,initial){
		var a = [],i;
		for(i=0;i<dimention;i++){
			a[i]=initial;
		}
		return a;
	}
	
	var data = [4,8,15,16,23,42];
	
	var add=function(a,b){
		return a+b;
	};
	
	var mult = function(a,b){
		return a*b;
	};
	
	var sum = data.reduce(add,0);
	var product = data.reduce(mult,1);
	
	pt("sum:"+sum);
	pt("mult:"+product);
	
	data.total=function(){  //data배열에 total메소드 추가 , 배열도 객체이기 때문에 메소드 추가가 가능하다. ->문자열 total 속성을 추가 해도 배열의 length는 변함이 없다. 
		return this.reduce(add,0);
	}
	
	var total = data.total();
	
	pt("total:"+total);
	
	
	var mArray =Array.dim(10,0);
	for(var i=0;i<mArray.length;i++){
		pt(mArray[i]);
	}
	
	function pt(str){
		document.write("<br>"+str);
	}
	
</script>
</head>
<body>

</body>
</html>